/**
 * 享元模式：用于减少创建对象的数量，以减少内存占用和提高性能
 * 
 * 示例需求：
 * 创建一个 Shape 接口和实现了 Shape 接口的实体类 Circle。
 * 定义工厂类 ShapeFactory。ShapeFactory 有一个 Circle 的 HashMap，其中键名为 Circle 对象的颜色。
 * 无论何时接收到请求，都会创建一个特定颜色的圆。ShapeFactory 检查它的 HashMap 中的 circle 对象，如果找到 Circle
 * 对象，则返回该对象，
 * 否则将创建一个存储在 hashmap 中以备后续使用的新对象，并把该对象返回到客户端。
 * FlyWeightPatternDemo 类使用 ShapeFactory 来获取 Shape 对象。
 * 它将向 ShapeFactory 传递信息（red / green / blue/ black / white），以便获取它所需对象的颜色。
 * 
 * 角色：
 * 享元工厂：
 * 抽象享元：Shape
 * 具体享元：Circle
 * 享元工厂：ShapeFactory
 * 客户端：SimpleMain
 */
public class SimpleMain {
    private static final String colors[] = { "Red", "Green", "Blue", "White", "Black" };

    public static void main(String[] args) {

        for (int i = 0; i < 20; ++i) {
            Circle circle = (Circle) ShapeFactory.getCircle(getRandomColor());
            circle.setX(getRandomX());
            circle.setY(getRandomY());
            circle.setRadius(100);
            circle.draw();
        }
    }

    private static String getRandomColor() {
        return colors[(int) (Math.random() * colors.length)];
    }

    private static int getRandomX() {
        return (int) (Math.random() * 100);
    }

    private static int getRandomY() {
        return (int) (Math.random() * 100);
    }
}
